package 剑指Offer;

public class Offer11_旋转数组的最小数字 {
    public static void main(String[] args) {
        System.out.println(new Offer11_旋转数组的最小数字().minArray(new int[]{1, 3, 1}));
    }

    public int minArray(int[] numbers) {
        int l = 0;
        int r = numbers.length - 1;

        while (l <= r) {
//注意这里，因为在l=r的时候还会循环一次，但是我们在l=r的时候已经得到了答案，就需要跳出循环了
            if (l == r) {
                break;
            }

            int mid = l + (r - l) / 2;
            if (numbers[mid] > numbers[r]) {
// mid 一定在 左排序数组 中
                l = mid + 1;
            }
// mid 一定在 右排序数组 中
            else if (numbers[mid] < numbers[r]) {
                r = mid;
            }
// 无法判断 mm 在哪个排序数组中
            else if (numbers[mid] == numbers[r]) {
// 解决方案： 执行 r=r-1 缩小判断范围
                r--;
            }

        }

//返回反转点，也就是最小值
        return numbers[l];
    }
}
